#include<bits/stdc++.h>
using namespace std;

// 你是一个专业的小偷，计划偷窃沿街的房屋，每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ，这意味着第一个房屋和最后一个房屋是紧挨着的。同时，相邻的房屋装有相互连通的防盗系统，如果两间相邻的房屋在同一晚上被小偷闯入，系统会自动报警 。

// 给定一个代表每个房屋存放金额的非负整数数组，计算你 在不触动警报装置的情况下 ，今晚能够偷窃到的最高金额。

// 来源：力扣（LeetCode）
// 链接：https://leetcode-cn.com/problems/house-robber-ii
// 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。

class Solution
{
private:
    /* data */
public:
    int rob(vector<int>& nums){
        int len=nums.size();
        if(len==1){
            return nums[0];
        }
        // 0不偷，1偷，2不偷第一个，3偷第一个
        int vec[]={0,0};
        int res1 =0;
        int res2 =0;
        vec[0]=0;
        vec[1]=nums[0];
        for(int i=1;i<len-1;++i){
            int temp1=vec[0];
            vec[0]=max(vec[0],vec[1]);
            vec[1]=temp1+nums[i];
        }
        res1 = max(vec[0],vec[1]);
        vec[0]=0;
        vec[1]=nums[1];
        for(int i=2;i<len;++i){
            int temp1=vec[0];
            vec[0]=max(vec[0],vec[1]);
            vec[1]=temp1+nums[i];
        }
        res2 = max(vec[0],vec[1]);
        return max(res1,res2);
    }
};


int main(int argc, char const *argv[])
{
    vector<int> nums={1,2,3,1};
    Solution s;
    int res =s.rob(nums);
    cout<<res<<endl;
    return 0;
}

